// Copyright (C) Kumo inc. and its affiliates.
// Author: Jeff.li lijippy@163.com
// All rights reserved.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.
//
#pragma once

#include <turbo/flags/flag.h>
#include <turbo/flags/declare.h>

TURBO_DECLARE_FLAG(bool,
           file_system_error_injection);

TURBO_DECLARE_FLAG(bool, enable_window_reference_verification);

TURBO_DECLARE_FLAG(int32_t, steps);

TURBO_DECLARE_FLAG(int32_t,
                   duration_sec);

TURBO_DECLARE_FLAG(int32_t,
                   batch_size);

TURBO_DECLARE_FLAG(int32_t, num_batches);

TURBO_DECLARE_FLAG(double,
                   null_ratio);

TURBO_DECLARE_FLAG(bool, enable_spill);

TURBO_DECLARE_FLAG(bool,
                   enable_oom_injection);

TURBO_DECLARE_FLAG(double, filter_ratio);
TURBO_DECLARE_FLAG(int32_t, max_error_rows);


TURBO_DECLARE_FLAG(int32_t, num_threads);

TURBO_DECLARE_FLAG(int32_t,
                   read_iteration_sec);

TURBO_DECLARE_FLAG(int32_t, num_source_files);

TURBO_DECLARE_FLAG(int64_t,
                   source_file_bytes);

TURBO_DECLARE_FLAG(int64_t,
                   memory_cache_bytes);

TURBO_DECLARE_FLAG(int64_t,
                   ssd_cache_bytes);

TURBO_DECLARE_FLAG(int32_t,
                   num_ssd_cache_shards);

TURBO_DECLARE_FLAG(bool, pollux_ssd_odirect);

TURBO_DECLARE_FLAG(int64_t,
                   ssd_checkpoint_interval_bytes);

TURBO_DECLARE_FLAG(int32_t, num_restarts);

TURBO_DECLARE_FLAG(bool,
                   enable_file_faulty_injection
);
TURBO_DECLARE_FLAG(bool,
                   enable_sorted_aggregations);


TURBO_DECLARE_FLAG(std::string,
                   repro_persist_path);

TURBO_DECLARE_FLAG(bool,
                   persist_and_run_once);

TURBO_DECLARE_FLAG(bool,
                   log_signature_stats);

TURBO_DECLARE_FLAG(bool,
                   enable_oom_injection);
TURBO_DECLARE_FLAG(int32_t, timing_repeats);


TURBO_DECLARE_FLAG(int64_t, arbitrator_capacity);


TURBO_DECLARE_FLAG(int32_t,
                   iteration_duration_sec);


TURBO_DECLARE_FLAG(int32_t,
                   num_threads);

TURBO_DECLARE_FLAG(int64_t, arbitrator_capacity);

TURBO_DECLARE_FLAG(int32_t,
                   global_arbitration_pct);

TURBO_DECLARE_FLAG(double,
                   spill_faulty_fs_ratio);

TURBO_DECLARE_FLAG(int32_t,
                   spill_fs_fault_injection_ratio);

TURBO_DECLARE_FLAG(int32_t,
                   task_abort_interval_ms);


TURBO_DECLARE_FLAG(bool,
                   retry_with_try);

TURBO_DECLARE_FLAG(bool,
                   find_minimal_subexpression);

TURBO_DECLARE_FLAG(bool,
                   disable_constant_folding);

TURBO_DECLARE_FLAG(std::string,
                   repro_persist_path);

TURBO_DECLARE_FLAG(bool,
                   persist_and_run_once);

TURBO_DECLARE_FLAG(double,
                   lazy_vector_generation_ratio);

TURBO_DECLARE_FLAG(double,
                   common_dictionary_wraps_generation_ratio);

TURBO_DECLARE_FLAG(int32_t,
                   max_expression_trees_per_step);

// The flags bellow are used to initialize ExpressionFuzzer::options.
TURBO_DECLARE_FLAG(std::string,
                   only);

TURBO_DECLARE_FLAG(std::string,
                   special_forms);

TURBO_DECLARE_FLAG(int32_t,
                   pollux_fuzzer_max_level_of_nesting);

TURBO_DECLARE_FLAG(int32_t,
                   max_num_varargs);


TURBO_DECLARE_FLAG(bool,
                   enable_variadic_signatures);

TURBO_DECLARE_FLAG(bool,
                   enable_dereference);

TURBO_DECLARE_FLAG(bool,
                   pollux_fuzzer_enable_complex_types);

TURBO_DECLARE_FLAG(bool,
                   pollux_fuzzer_enable_decimal_type);

TURBO_DECLARE_FLAG(bool,
                   pollux_fuzzer_enable_column_reuse);

TURBO_DECLARE_FLAG(bool,
                   pollux_fuzzer_enable_expression_reuse);

TURBO_DECLARE_FLAG(std::string,
                   assign_function_tickets);

TURBO_DECLARE_FLAG(int32_t,
                   max_spill_level);
